package com.work.yshop.mvp.contract;

import com.work.yshop.model.ChatMessage;
import com.work.yshop.model.Message;
import com.work.yshop.mvp.BasePresenter;
import com.work.yshop.mvp.BaseView;

import java.util.List;

/**
 * 聊天页面的契约类，定义View和Presenter的接口
 */
public interface ChatContract {

    /**
     * View接口，由Activity实现
     */
    interface View extends BaseView {
        /**
         * 初始化聊天信息
         */
        void initChatInfo(Message message);
        
        /**
         * 显示聊天消息列表
         */
        void showChatMessages(List<ChatMessage> chatMessages);
        
        /**
         * 添加新消息到列表
         */
        void addNewMessage(ChatMessage message);
        
        /**
         * 滚动到最新消息
         */
        void scrollToLatestMessage();
        
        /**
         * 清空输入框
         */
        void clearInputBox();
        
        /**
         * 显示发送失败
         */
        void showSendFailed(String errorMsg);
    }
    
    /**
     * Presenter接口，由Presenter实现
     */
    abstract class Presenter extends BasePresenter<View> {
        /**
         * 初始化聊天
         */
        public abstract void initChat(Message message);
        
        /**
         * 加载聊天历史
         */
        public abstract void loadChatHistory(int contactId);
        
        /**
         * 发送消息
         */
        public abstract void sendMessage(String content);
        
        /**
         * 更新原始消息
         */
        public abstract void updateOriginalMessage(Message originalMessage, String latestContent);
    }
    
    /**
     * 数据源接口
     */
    interface DataSource {
        /**
         * 获取聊天历史
         */
        void getChatHistory(int contactId, LoadCallback<List<ChatMessage>> callback);
        
        /**
         * 发送消息
         */
        void sendMessage(int contactId, String content, LoadCallback<ChatMessage> callback);
    }
    
    /**
     * 回调接口
     */
    interface LoadCallback<T> {
        /**
         * 加载成功
         */
        void onLoaded(T data);
        
        /**
         * 加载失败
         */
        void onError(String message);
    }
} 